﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using clBUS;
using clEntidad;
using clEntidad.Ex;

namespace portero_
{
    public partial class frmIngresoLlave : Form
    {
        public frmIngresoLlave()
        {
            InitializeComponent();
        }

        private void tsbSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void tbIdLlave_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void textBox5_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void tbCantLlave_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void tbNumDoc_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void tbApePat_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void tbApeMat_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void tbNombres_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void cbEmpresa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
            else
                e.KeyChar = char.ToUpper(e.KeyChar);
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void textBox7_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
            else
                e.KeyChar = char.ToUpper(e.KeyChar);
        }

        private void tbNumDoc_Validated(object sender, EventArgs e)
        {
            buscar();
        }
        private void buscar()
        {
            BUSPersona objBUS = new BUSPersona(Constantes.CADENA_BD);
            BUSEquipo objBUSEqp = new BUSEquipo(Constantes.CADENA_BD);
            Persona persona = objBUS.get(tbNumDoc.Text.Trim());
            if (persona != null)
            {
                tbApePat.Text = persona.apePat;
                tbApeMat.Text = persona.apeMat;
                tbNombres.Text = persona.nombres;
                cbEmpresa.Text = persona.empresa;
                if (persona.numMovil != null)
                    tbNumMovil.Text = persona.numMovil;
            }

        }

        private void cbEmpresa_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                SendKeys.Send("{TAB}");

        }

        private void frmIngresoLlave_Load(object sender, EventArgs e)
        {
            llenaElementos("empresa", cbEmpresa);
            llenaElementos("motivo", cbMotivo);
        }
        private void llenaElementos(String elemento, ComboBox cb)
        {
            BUSBase objBUS = new BUSBase(Constantes.CADENA_BD);
            List<String> elems = objBUS.getElementos(elemento);
            AutoCompleteStringCollection data = new AutoCompleteStringCollection();
            foreach (String cadena in elems)
            {
                data.Add(cadena);
            }
            cb.AutoCompleteCustomSource = data;
        }

        private void frmIngresoLlave_Shown(object sender, EventArgs e)
        {
            tbIdLlave.Focus();
            if (tbIdLlave.Text.Trim() != "")
            {
                buscarLlave();
            }
        }

        private void cbMotivo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                SendKeys.Send("{TAB}");
        }

        private void tbIdLlave_Validated(object sender, EventArgs e)
        {
            buscarLlave();
        }
        private void buscarLlave()
        {
            BUSLlave objBUS = new BUSLlave(Constantes.CADENA_BD);
            Llave llave = objBUS.get (tbIdLlave.Text.Trim());
            if (llave != null)
            {
                tbAmbienteLlave.Text = llave.detalle;
                tbCantLlave.Text = llave.cant1.ToString();
                tbCantM.Text = llave.cant2.ToString();
                tbCantE.Text = llave.cant3.ToString();
                tbAlertaEn.Text = llave.alertaEn.ToString();
                if (llave.estado == "E")
                {
                    this.Text = "Devolución de Llave";
                    tsbSave.Enabled = false;
                    tsbDev.Enabled = true;
                    groupBox2.Enabled = false;
                    groupBox3.Enabled = false;
                    tbAmbienteLlave.ReadOnly = true;
                    tbCantLlave.ReadOnly = true;
                    tbCantM.ReadOnly = true;
                    tbCantE.ReadOnly = true;
                    tbAlertaEn.ReadOnly = true;
                    tbObserDev.ReadOnly = false;
                    tbObserv.ReadOnly = true ;

                    BUSRegistroLlave objBUSRLl = new BUSRegistroLlave(Constantes.CADENA_BD);
                    RegistroLlave regLlave = objBUSRLl.get(llave.ultId);
                    id = llave.ultId;
                    tbAmbienteLlave.Text = regLlave.llave.detalle;
                    tbCantLlave.Text = regLlave.llave.cant1.ToString();
                    tbCantM.Text = regLlave.llave.cant2.ToString();
                    tbNumDoc.Text = regLlave.persona.numDoc;
                    tbApePat.Text = regLlave.persona.apePat;
                    tbApeMat.Text = regLlave.persona.apeMat;
                    tbNombres.Text = regLlave.persona.nombres;
                    tbNumMovil.Text = regLlave.persona.numMovil;
                    tbAutoriza.Text = regLlave.autoriza;
                    cbMotivo.Text = regLlave.motivo;
                    tbObserv.Text = regLlave.observaciones;
                    cbEmpresa.Text = regLlave.persona.empresa;
                }
                else
                {
                    tsbSave.Enabled = true;
                    tsbDev.Enabled = false;
                    groupBox2.Enabled = true;
                    groupBox3.Enabled = true;
                    tbAmbienteLlave.ReadOnly = false;
                    tbCantLlave.ReadOnly = false;
                    tbCantM.ReadOnly = false;
                    tbCantM.ReadOnly = false;
                    tbAlertaEn.ReadOnly = false;
                    tbObserDev.ReadOnly = true ;
                    tbObserv.ReadOnly = false ;
                }
            }
        }

        private void tsbSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (datosCompletos())
                {
                    grabar();
                }
            }
            catch (BUSException ex)
            {
                MessageBox.Show(ex.Message , Constantes.cNOMBRE_SIS, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                
            }

        }
        public bool datosCompletos()
        {
            if(tbIdLlave.Text.Trim()=="")
            {
                tbIdLlave.Focus();
                throw new BUSException("Debe ingresar el código de la llave");
            }
            if (tbAmbienteLlave.Text.Trim() == "")
            {
                tbAmbienteLlave.Focus();
                throw new BUSException("Debe ingresar descripción de la llave");
            }
            try
            {
                int cant1 = Convert.ToInt16(tbCantLlave.Text);
            }
            catch (FormatException ex)
            {
                tbCantLlave.Focus();
                throw new BUSException("Cantidad de llaves no válida");
            }

            if (tbCantM.Text.Trim() == "")
            {
                tbCantM.Text = "0";
            }
            try
            {
                int cant2 = Convert.ToInt16(tbCantM.Text);
            }
            catch (FormatException ex)
            {
                tbCantM.Focus();
                throw new BUSException("Cantidad de llaves M no válida");
            }

            if (tbCantE.Text.Trim() == "")
            {
                tbCantE.Text = "0";
            }
            try
            {
                int cant3 = Convert.ToInt16(tbCantE.Text);
            }
            catch (FormatException ex)
            {
                tbCantE.Focus();
                throw new BUSException("Cantidad de llaves E no válida");
            }
            try
            {
                int alertasEn = Convert.ToInt16(tbAlertaEn.Text);
            }
            catch (FormatException ex)
            {
                tbAlertaEn.Focus();
                throw new BUSException("Numéro de dias de alerta no válido");
            }

            if (tbNumDoc.Text.Trim() == "")
            {
                tbNumDoc.Focus();
                throw new BUSException("Debe ingresar Nro de Documento de receptor");
            }
            if (tbApePat.Text.Trim() == "")
            {
                tbApePat.Focus();
                throw new BUSException("Debe ingresar apellido de receptor");
            }
            if (tbNombres.Text.Trim() == "")
            {
                tbNombres.Focus();
                throw new BUSException("Debe ingresar nombre de receptor");
            }
            if (tbAutoriza.Text.Trim() == "")
            {
                tbAutoriza.Focus();
                throw new BUSException("Debe ingresar autorización");
            }

            return true;
        }
        public void grabar()
        {
            Llave llave = new Llave();
            llave.codigo = tbIdLlave.Text;
            llave.detalle = tbAmbienteLlave.Text;
            llave.cant1 = Int16.Parse( tbCantLlave.Text);
            llave.cant2 = Int16.Parse(tbCantM.Text);
            llave.cant3 = Int16.Parse(tbCantE.Text);
            llave.alertaEn = Int16.Parse(tbAlertaEn.Text);
            llave.codLocal = Constantes.LOCAL.id;
            llave.estado = "E";

            Persona persona = new Persona();
            persona.numDoc = tbNumDoc.Text;
            persona.apePat = tbApePat.Text;
            persona.apeMat = tbApeMat.Text;
            persona.nombres = tbNombres.Text;
            persona.empresa = cbEmpresa.Text;
            persona.numMovil = tbNumMovil.Text;
            persona.cargo = "";
            persona.visitado = new Visitado();
            persona.visitado.area = "";
            persona.visitado.nombre = "";
            persona.visitado.ubicacion = "";

            BUSRegistroLlave busLlave = new BUSRegistroLlave(Constantes.CADENA_BD);
            RegistroLlave reg = new RegistroLlave();
            reg.persona = persona;
            reg.llave = llave;
            reg.motivo = cbMotivo.Text;
            reg.idLocal = Constantes.LOCAL.id;
            reg.autoriza = tbAutoriza.Text;
            reg.observaciones = tbObserv.Text;
            reg.observaciones_dev = tbObserDev.Text;

            busLlave.grabar(reg, Constantes.USUARIO );
            MessageBox.Show("Se grabó correctamente", Constantes.cNOMBRE_SIS, MessageBoxButtons.OK , MessageBoxIcon.Information);
            this.Close();
        }
        private int id;

        private void tsbDev_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Confirma devolución de llave de " + tbAmbienteLlave.Text
                , "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                try
                {
                    BUSRegistroLlave objBUS = new BUSRegistroLlave(Constantes.CADENA_BD);
                    objBUS.devolucion(id, Constantes.USUARIO.idLogin, tbIdLlave.Text, tbObserDev.Text);
                }catch(SystemException ex){
                    MessageBox.Show(ex.Message, Constantes.cNOMBRE_SIS, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                this.Close();
            }
        }

        private void tbCantE_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }

        private void tbAlertaEn_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
                SendKeys.Send("{TAB}");
        }


    }
}
